\documentclass[UTF8]{ctexart}

\usepackage{graphicx}
\usepackage{amsmath}
\usepackage{ctex}
\setlength{\parindent}{2em}

\title{Week 1:双链表的设计与实现}

\author{唐瑞良\\ 强基工程力学 3210105852}

\begin{document}

\maketitle

\section{设计思路}
该双链表的设计包括实现双链表的初始化，节点的插入，删除，链表中某一值的查找，以及使用结束后的内存回收。\\
\indent 双链表的初始化交由该双链表类的构造函数完成。为链表分配了首尾的地址，并规定节点数为0。\\
\indent 对于节点的插入/删除，插入/删除在最前，中间与最后的本质是一样的，都是将插入位置前的节点的next指针指向新节点，并将插入位置后的节点的pre指针指向新节点。只是代码实现上存在小部分差异。\\
\indent 对于链表中某一值的查找，采用了逐个查找的方式。若查找到则返回该节点的标号，否则返回错误代号-1,表明并未在双链表内找到该值。\\
\indent 最终内存回收交由该双链表类的析构函数完成。
\section{测试说明}
\begin{verbatim}
DoubleLinkList<int>* L = new DoubleLinkList<int>();
\end{verbatim}
该行创建了链表并命名其为L，并确认了类型为int。\\
\begin{verbatim}
for(i = 0;i < 5;i++)
  {
    L->insert_Node(i,i+1);
  }
L->read_all();
\end{verbatim}
这里完成了5个节点的插入与赋值（emmm好像一直都是执行向尾部插入，向中间插入的代码删掉好像也无妨hhh），读取链表并输出：
\begin{verbatim}
1 2 3 4 5 

\end{verbatim}

\begin{verbatim}
iter = L->iterator_find(L,3);
L->_error(iter);
\end{verbatim}
调用迭代器寻找值3,找到其位于节点2，未报错。
\begin{verbatim}
L->delete_Node(iter);
\end{verbatim}
删除了节点2。输出如下内容表明删除成功：
\begin{verbatim}
Node 2 has been deleted.
\end{verbatim}
再次输出链表，有输出：
\begin{verbatim}
1 2 4 5 
\end{verbatim}
最后调用迭代器寻找值3,并未找到，触发报错输出：
\begin{verbatim}
Doesn't exist.
\end{verbatim}

\end{document}
